home *** CD-ROM | disk | FTP | other *** search
/ PC World Interactive 7 / PC World Interactive 7.iso / program / vbkontrol.exe / VBSTAK.ZIP / VBSTAK / VBMAIL / SENDMAIL.FRM < prev    next >
Text File  |  1995-07-21  |  11KB  |  413 lines

  1. VERSION 2.00
  2. Begin Form SendMailForm 
  3.    BorderStyle     =   3  'Fixed Double
  4.    Caption         =   "Mail"
  5.    ClientHeight    =   4605
  6.    ClientLeft      =   660
  7.    ClientTop       =   1950
  8.    ClientWidth     =   7395
  9.    Height          =   5010
  10.    Icon            =   0
  11.    Left            =   600
  12.    LinkTopic       =   "Form1"
  13.    MaxButton       =   0   'False
  14.    MDIChild        =   -1  'True
  15.    MinButton       =   0   'False
  16.    ScaleHeight     =   4605
  17.    ScaleWidth      =   7395
  18.    Top             =   1605
  19.    Width           =   7515
  20.    Begin SSFrame Frame3D1 
  21.       Height          =   4605
  22.       Left            =   30
  23.       TabIndex        =   0
  24.       Top             =   30
  25.       Width           =   7365
  26.       Begin VBSTAK MailStak 
  27.          Debug           =   0   'False
  28.          Host            =   "haddock2"
  29.          HostAddress     =   ""
  30.          InputLen        =   0
  31.          Left            =   5550
  32.          LocalAddress    =   ""
  33.          LocalPort       =   0
  34.          Options         =   0
  35.          Protocol        =   0
  36.          ProtocolName    =   "tcp"
  37.          RemotePort      =   0
  38.          ServiceName     =   "smtp"
  39.          Top             =   270
  40.       End
  41.       Begin SSCheck TestModeCheck 
  42.          Caption         =   "Test Mode"
  43.          Height          =   315
  44.          Left            =   4350
  45.          TabIndex        =   6
  46.          Top             =   420
  47.          Width           =   1545
  48.       End
  49.       Begin SSPanel Panel3D1 
  50.          BevelInner      =   1  'Inset
  51.          Height          =   405
  52.          Index           =   1
  53.          Left            =   780
  54.          TabIndex        =   15
  55.          Top             =   120
  56.          Width           =   3015
  57.          Begin TextBox MyAddressBox 
  58.             BorderStyle     =   0  'None
  59.             Height          =   225
  60.             Left            =   90
  61.             TabIndex        =   1
  62.             Top             =   90
  63.             Width           =   2835
  64.          End
  65.       End
  66.       Begin Timer LinkTimer 
  67.          Enabled         =   0   'False
  68.          Interval        =   10000
  69.          Left            =   3840
  70.          Top             =   210
  71.       End
  72.       Begin SSPanel StatusBox 
  73.          BevelInner      =   1  'Inset
  74.          Height          =   375
  75.          Left            =   780
  76.          TabIndex        =   9
  77.          Top             =   1020
  78.          Width           =   5445
  79.       End
  80.       Begin SSPanel Panel3D2 
  81.          BevelInner      =   1  'Inset
  82.          Height          =   2865
  83.          Left            =   60
  84.          TabIndex        =   8
  85.          Top             =   1680
  86.          Width           =   7245
  87.          Begin TextBox MessageBox 
  88.             Height          =   2715
  89.             Left            =   60
  90.             MultiLine       =   -1  'True
  91.             ScrollBars      =   2  'Vertical
  92.             TabIndex        =   3
  93.             Top             =   60
  94.             Width           =   7125
  95.          End
  96.       End
  97.       Begin CommandButton CloseButton 
  98.          Caption         =   "Close"
  99.          Height          =   315
  100.          Left            =   6270
  101.          TabIndex        =   4
  102.          Top             =   150
  103.          Width           =   1035
  104.       End
  105.       Begin CommandButton SendButton 
  106.          Caption         =   "Send"
  107.          Enabled         =   0   'False
  108.          Height          =   315
  109.          Left            =   6270
  110.          TabIndex        =   5
  111.          Top             =   450
  112.          Width           =   1035
  113.       End
  114.       Begin SSPanel Panel3D1 
  115.          BevelInner      =   1  'Inset
  116.          Height          =   405
  117.          Index           =   0
  118.          Left            =   780
  119.          TabIndex        =   7
  120.          Top             =   570
  121.          Width           =   3015
  122.          Begin TextBox AddressBox 
  123.             BorderStyle     =   0  'None
  124.             Height          =   225
  125.             Left            =   90
  126.             TabIndex        =   2
  127.             Top             =   90
  128.             Width           =   2835
  129.          End
  130.       End
  131.       Begin Label Label6 
  132.          BackColor       =   &H00C0C0C0&
  133.          Caption         =   "Message:"
  134.          Height          =   195
  135.          Left            =   90
  136.          TabIndex        =   10
  137.          Top             =   1470
  138.          Width           =   825
  139.       End
  140.       Begin Label Label5 
  141.          BackColor       =   &H00C0C0C0&
  142.          Caption         =   "Status:"
  143.          Height          =   255
  144.          Left            =   60
  145.          TabIndex        =   11
  146.          Top             =   1080
  147.          Width           =   735
  148.       End
  149.       Begin Label Label2 
  150.          BackColor       =   &H00C0C0C0&
  151.          Caption         =   "From:"
  152.          Height          =   315
  153.          Left            =   60
  154.          TabIndex        =   13
  155.          Top             =   150
  156.          Width           =   705
  157.       End
  158.       Begin Label Label1 
  159.          BackColor       =   &H00C0C0C0&
  160.          Caption         =   "To:"
  161.          Height          =   285
  162.          Left            =   150
  163.          TabIndex        =   16
  164.          Top             =   630
  165.          Width           =   585
  166.       End
  167.       Begin Label Label4 
  168.          BackColor       =   &H00C0C0C0&
  169.          Caption         =   "Link Timer"
  170.          Height          =   255
  171.          Left            =   4320
  172.          TabIndex        =   14
  173.          Top             =   180
  174.          Visible         =   0   'False
  175.          Width           =   1425
  176.       End
  177.    End
  178.    Begin Label Label3 
  179.       Caption         =   "Label3"
  180.       Height          =   30
  181.       Left            =   7440
  182.       TabIndex        =   12
  183.       Top             =   4650
  184.       Width           =   135
  185.    End
  186. End
  187. Dim HostResponded As Integer
  188. Dim ServiceResponded As Integer
  189. Dim ProtocolResponded As Integer
  190. Dim LinkTime As Integer
  191.  
  192. Sub CloseButton_Click ()
  193.  
  194. ' Close the socket and release VBX
  195.   Unload Me
  196.  
  197. End Sub
  198.  
  199. Sub Form_Load ()
  200.   
  201.   MailStak.Host = GetIniField("Host", "HostName", "vbmail.ini")
  202.   MailStak.ServiceName = GetIniField("Host", "SendService", "vbmail.ini")
  203.  
  204. End Sub
  205.  
  206. Sub LinkTimer_Timer ()
  207. ' Error on timeout
  208.   LinkTime = LinkTime - 1
  209.   If LinkTime = 0 Then
  210.     result = MsgBox("Link timeout", MB_ICONSTOP + MB_OK)
  211.     LinkTimer.Enabled = False
  212.   End If
  213. End Sub
  214.  
  215. Sub MailStak_Message (message As Integer)
  216. ' Receive socket messages
  217.   
  218.   Dim responseString As String
  219.  
  220.   Select Case message
  221.   Case STAK_EVENT_HOST
  222.     HostResponded = True
  223.     processRequest ("Host")
  224.  
  225.   Case STAK_EVENT_SERVICE
  226.     ServiceResponded = True
  227.     Call processRequest("Service")
  228.  
  229.   Case STAK_EVENT_PROTOCOL
  230.     ProtocolResponded = True
  231.     Call processRequest("Protocol")
  232.  
  233.   Case FD_READ
  234.     responseString = MailStak.Input
  235.     Call processMail(responseString)
  236.   
  237.   Case FD_CONNECT
  238.   ' Connected to server
  239.     If MailStak.Error = 0 Then
  240.       Connected = True
  241.       closeButton.Enabled = False
  242.       StatusBox.Caption = "Connected to " & MailStak.Host
  243.     Else
  244.       StatusBox.Caption = "Cannot connect to host " & HostName
  245.     End If
  246.   Case FD_CLOSE
  247.   ' Remote Disconect
  248.     Connected = False
  249.     MailStak.Action = STAK_ACTION_CLOSE
  250.     closeButton.Enabled = True
  251.   End Select
  252.  
  253. End Sub
  254.  
  255. Sub MessageBox_Change ()
  256.   
  257.   SendButton.Enabled = MyAddressBox.DataChanged And AddressBox.DataChanged
  258.  
  259. End Sub
  260.  
  261. Sub MyAddressBox_LostFocus ()
  262. ' Set my Address
  263.     MyAddress = MyAddressBox.Text
  264.  
  265. End Sub
  266.  
  267. Sub processMail (responseString As String)
  268. ' Process the mail response and update based on state
  269.  
  270.   On Error GoTo ProcessMailError
  271.   
  272.   LinkTimer.Enabled = False
  273.   
  274.   If MailState <> SMTP_END Then
  275.     StatusBox.Caption = responseString
  276.   End If
  277.  
  278.   ' If test node display and step
  279.   If TestMode Then
  280.     result = MsgBox("Mail State: " & Str(MailState), MB_OK)
  281.   End If
  282.   
  283.   ' State machine for mail States
  284.   Select Case MailState
  285.   Case SMTP_IDLE
  286.     Exit Sub
  287.  
  288.   Case SMTP_LOCATE_SERVICE
  289.     MailState = SMTP_LOCATING_SERVICE
  290.     Call StartTimer(STAK_WAIT_INTERVAL)
  291.     MailStak.Action = STAK_ACTION_GET_SERVICE
  292.  
  293.   Case SMTP_LOCATING_SERVICE
  294.     'MailStak.ProtocolName = MailStak.ProtocolName & Chr(0)
  295.     MailState = SMTP_LOCATING_PROTOCOL
  296.     Call StartTimer(STAK_WAIT_INTERVAL)
  297.     MailStak.Action = STAK_ACTION_GET_PROTOCOL
  298.     
  299.   Case SMTP_LOCATING_PROTOCOL
  300.     StatusBox.Caption = "Locating Host"
  301.     MailState = SMTP_LOCATING_HOST
  302.     MailStak.Action = STAK_ACTION_GET_HOST
  303.     StartTimer (STAK_SERVICE_INTERVAL)
  304.  
  305.   Case SMTP_LOCATING_HOST
  306.       closeButton.Enabled = False
  307.       MailState = SMTP_CONNECT
  308.       StartTimer (STAK_WAIT_INTERVAL)
  309.       MailStak.Action = STAK_ACTION_OPEN
  310.  
  311.   Case SMTP_CONNECT
  312.     If InStr(1, responseString, "220 ") <> 0 Then
  313.       MailState = SMTP_HELO
  314.       Call SendData("HELO " & MyAddress & Chr(10))
  315.     Else
  316.       'Error SMTP_ERROR
  317.     End If
  318.   Case SMTP_HELO
  319.     If InStr(1, responseString, "250 ") <> 0 Then
  320.       MailState = SMTP_MAIL_FROM
  321.       Call SendData("mail from:<" & MyAddress & ">" & Chr(10))
  322.     Else
  323.       ' Error SMTP_ERROR
  324.     End If
  325.   Case SMTP_MAIL_FROM
  326.     If InStr(1, responseString, "250 ") > 0 Then
  327.       MailState = SMTP_RCPT_TO
  328.       Call SendData("RCPT TO:<" & AddressBox.Text & ">" & Chr(10))
  329.     Else
  330.       Error SMTP_ERROR
  331.     End If
  332.   Case SMTP_RCPT_TO
  333.     If InStr(1, responseString, "250 ") Then
  334.       MailState = SMTP_DATA
  335.       Call SendData("DATA" & Chr(10))
  336.     Else
  337.       Error SMTP_ERROR
  338.     End If
  339.  
  340.   Case SMTP_DATA
  341.     If InStr(1, responseString, "354 ") Then
  342.       MailState = SMTP_CLOSE
  343.       Call SendData(MessageBox.Text & Chr(10) & "." & Chr(10))
  344.     Else
  345.       Error SMTP_ERROR
  346.     End If
  347.   Case SMTP_CLOSE
  348.  
  349.     If InStr(1, responseString, "250 ") Then
  350.       MailState = SMTP_END
  351.       Call SendData("QUIT" & Chr(10))
  352.     Else
  353.       Error SMTP_ERROR
  354.     End If
  355.  
  356.   Case SMTP_END
  357.     Exit Sub
  358.   End Select
  359.   
  360. ProcessMailExit:
  361.   Exit Sub
  362.  
  363. ProcessMailError:
  364.   If Err = SMTP_ERROR Then
  365.     MailState = SMTP_IDLE
  366.     Resume ProcessMailExit
  367.   Else
  368.     result = MsgBox(" Error " & Error, MB_ICONSTOP + MB_OK)
  369.     Resume ProcessMailExit
  370.   End If
  371. End Sub
  372.  
  373. Sub processRequest (requestType As String)
  374. ' Process the response to a host,service or protocol request
  375.     If MailStak.Error <> NO_ERROR Then
  376.       MailState = SMTP_IDLE
  377.       StatusBox.Caption = requestType & " Error " & Str(MailStak.Error)
  378.     Else
  379.       Call processMail("")
  380.     End If
  381.  
  382. End Sub
  383.  
  384. Sub SendButton_Click ()
  385. ' Query smail and wait for responses
  386.   
  387.   MailState = SMTP_LOCATE_SERVICE
  388.   processMail ("")
  389.  
  390. End Sub
  391.  
  392. Sub SendData (dataBuffer As String)
  393. ' Send the buffer to the socket
  394.   StartTimer (STAK_WAIT_INTERVAL)
  395.   MailStak.Output = dataBuffer '& Chr(0)
  396.   MailStak.Action = STAK_ACTION_SEND
  397.  
  398. End Sub
  399.  
  400. Sub StartTimer (Interval As Integer)
  401.     LinkTime = Interval
  402.     LinkTimer.Interval = 1000
  403.     LinkTimer.Enabled = True
  404.  
  405. End Sub
  406.  
  407. Sub TestModeCheck_Click (Value As Integer)
  408.   ' Set the test mode
  409.   TestMode = TestModeCheck.Value
  410.  
  411. End Sub
  412.  
  413.